package project.vip.action;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import project.order.weixi.CommonUtil;
import project.order.weixi.SDKRuntimeException;
import project.order.work.AccessTokenThread;
import project.vip.utils.VipWxUtils;
import project.vip.utils.bean.WxJsApiBean;

public class Snippet {
	/**
		 * 创建JS－API
		 * 
		 * @return
		 * @throws SDKRuntimeException
		 */
		private WxJsApiBean createJsApi(String hideMenuList, String jsApiList,
				String url) throws SDKRuntimeException {
			WxJsApiBean jsBean = new WxJsApiBean();
			jsBean.setAppId(AccessTokenThread.appid);
			jsBean.setJsApiList(jsApiList);
			jsBean.setHideMenuList(hideMenuList);
			jsBean.setNonceStr(CommonUtil.CreateNoncestr());
			jsBean.setTimestamp(Long.toString(new Date().getTime() / 1000));
			// --组装成加密信息:签名生成规则如下：参与签名的字段包括noncestr（随机字符串）, 有效的jsapi_ticket,
			// timestamp（时间戳）,
			// --url（当前网页的URL，不包含#及其后面部分） 。对所有待签名参数按照字段名的ASCII
			// 码从小到大排序（字典序）后，使用URL键值对的格式（即key1=value1&key2=value2…）
			// --拼接成字符串string1。这里需要注意的是所有参数名均为小写字符。对string1作sha1加密，字段名和字段值都采用原始值，不进行URL
			// 转义。
			HashMap<String, String> nativeObj = new HashMap<String, String>();
			nativeObj.put("noncestr", jsBean.getNonceStr());
			nativeObj.put("jsapi_ticket", AccessTokenThread.jsapi_ticket);
			nativeObj.put("timestamp", jsBean.getTimestamp());
			nativeObj.put("url", url);
			// --进行签名
			jsBean.setSignature(GetJsAPISign(nativeObj));
	
			return jsBean;
		}
	
		private String GetJsAPISign(HashMap<String, String> bizObj)
				throws SDKRuntimeException {
			HashMap<String, String> bizParameters = new HashMap<String, String>();
	
			List<Map.Entry<String, String>> infoIds = new ArrayList<Map.Entry<String, String>>(
					bizObj.entrySet());
	
			Collections.sort(infoIds, new Comparator<Map.Entry<String, String>>() {
				public int compare(Map.Entry<String, String> o1,
						Map.Entry<String, String> o2) {
					return (o1.getKey()).toString().compareTo(o2.getKey());
				}
			});
	
			for (int i = 0; i < infoIds.size(); i++) {
				Map.Entry<String, String> item = infoIds.get(i);
				if (item.getKey() != "") {
					// bizParameters.put(item.getKey().toLowerCase(),
					// item.getValue());
					bizParameters.put(item.getKey(), item.getValue());
				}
			}
	
			String bizString = CommonUtil.FormatBizQueryParaMap(bizParameters,
					false);
	
			// return SHA1Util.Sha1(bizString);
			return VipWxUtils.Sha1(bizString);
	
		}
}

